package com.wavehi.mapper;

import com.wavehi.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author WaveHi
 * @Date 19/9/2021 上午 10:25
 * @Version 1.0
 * @Contact HJBWaveHi@163.com
 * @Description CRUD for table t_user
 */
public interface IUserMapper {
    /**
     * 添加一条用户信息
     * @param user 需要添加的用户信息
     * @return 返回false表示添加失败
     */
    Boolean insert(User user);

    /**
     * 删除一条用户信息
     * @param id 用户对应的id
     * @return 返回false表示删除失败或没有对应的用户数据
     */
    Boolean deleteById(Long id);

    /**
     * 更新用户一条用户信息
     * @param user 需要更新的用户信息
     * @return 返回false表示更新失败或没有对应的用户信息
     */
    Boolean update(User user);

    /**
     * 根据id查询指定用户的信息
     * @param id 用户对应的id
     * @return 返回包含用户信息的对象
     */
    User selectById(Long id);

    /**
     * 根据用户名查询指定用户的信息
     * @param username 用户对应的用户名
     * @return 返回一个包含指定用户信息的对象
     */
    User selectByUsername(String username);

    /**
     * 根据用户名和密码查询指定用户的信息
     * @param username 用户名
     * @param password 密码
     * @return 返回一个包含指定用户信息的对象
     */
    User selectByUsernameAndPassword(@Param("username")String username, @Param("password")String password);

    /**
     * 查询所有用户的信息
     * @return 返回一个包含所有用户信息的List集合
     */
    List<User> selectAll();

    /**
     * 根据索引和信息条数来查询指定范围的用户信息
     * @param offset 起始索引
     * @param size 信息条数
     * @return 返回一个包含指定范围用户信息的List集合
     */
    List<User> selectByLimit(@Param("offset")Integer offset, @Param("size")Integer size);

    /**
     * 根据筛选条件获取指定的用户
     * @param user 封装筛选条件的对象
     * @return 返回一个包含所有指定用户信息的List集合
     */
    List<User> selectByCondition(User user);

    /**
     * 根据筛选条件动态获取数据
     * @param user 封装筛选条件的对象
     * @param offset 起始索引
     * @param size 信息条数
     * @return 返回一个包含所有指定用户的信息
     */
    List<User> selectByConditionAndLimit(@Param("user")User user, @Param("offset")Integer offset, @Param("size")Integer size);
}
